package controlador;

import classes.Lotacao;
import classes.Servidor;
import dao.ServidorDao;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.GeralException;
import java.util.ArrayList;

/**
 *
 * @author Roberta
 */
public class ServidorControlador {

    public static String cpf;
    public static int matricula;
    private ServidorDao dao;

    public ServidorControlador() {

        this.dao = new ServidorDao();
    }

    /**
     * 
     * @param s = Servidor
     * @throws GeralException
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void insert(Servidor s) throws GeralException, ConexaoException, ConsultaException {
        s.getMatricula();
        ArrayList<Servidor> lista = (ArrayList<Servidor>) dao.listar();

        for (Servidor resp : lista) {
            if (s.getMatricula() == resp.getMatricula()) {
                throw new GeralException("Matricula já cadastrada!");
            }
          /*  if (s.getCpf().equals(resp.getCpf())) {
                throw new GeralException("CPF já cadastrado!");
            }*/
            if (s.getEmailProf().equals(resp.getEmailProf())) {
                throw new GeralException("E-mail já cadastrada!");
            }
        }
        if (s.getNasc() == null) {
            throw new GeralException("Digite a data de nascimento no formatdo dd/mm/aaaa.");
        }
        if (s.getCargoC().getCargoC_id() == 1 && s.getCargoE().getCargoE_id() == 1) {
            throw new GeralException("Escolha um cargo.");
        }
        if (s.getMatricula() == 0) {
            throw new GeralException("Digite uma matricula válida!");
        } else if (s.getLogin().trim().equals("") || s.getNome().trim().equals("") || s.getTelefone1().trim().equals("-") || s.getTelefoneSetor().trim().equals("-")
                || s.getEmailProf().trim().equals("") || s.getCpf().trim().equals("")) {
            throw new GeralException("Preencha todos os campos obrigatórios!");
        } else if (s.getEmailPessoal().indexOf("@") == -1 && s.getEmailPessoal().indexOf(".") == -1 || s.getEmailPessoal().equals("")) {
            throw new GeralException("Digite um e-mail válido.");
        } else {
            this.dao.inserir(s);
        }
    }

    /**
     * 
     * @param s = Servidor
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Servidor> listar() throws ConexaoException, ConsultaException {
        return (ArrayList<Servidor>) this.dao.listar();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Servidor> listarDesabilitados() throws ConexaoException, ConsultaException {
        return (ArrayList<Servidor>) this.dao.listarDesabilitados();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Servidor> listarAtivos() throws ConexaoException, ConsultaException {
        return (ArrayList<Servidor>) this.dao.listarAtivos();
    }

    /**
     * 
     * @param s = Servidor
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void delete(Servidor s) throws ConexaoException, ConsultaException {
        this.dao.deletar(s);
    }

    /**
     * 
     * @param s = Servidor
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void alterar(Servidor s) throws ConexaoException, ConsultaException, GeralException {

        if (s.getNasc() == null) {
            throw new GeralException("Digite a data de nascimento no formatdo dd/mm/aaaa.");
        }
        if (s.getCargoC().getCargoC_id() == 1 && s.getCargoE().getCargoE_id() == 1) {
            throw new GeralException("Escolha um cargo.");
        }
        if (s.getCpf().trim().equals("") || s.getNome().trim().equals("") || s.getTelefone1().trim().equals("-") || s.getTelefoneSetor().trim().equals("-")
                || s.getEmailProf().trim().equals("") || s.getCpf().trim().equals("")) {
            throw new GeralException("Preencha todos os campos obrigatórios!");

        } else if (s.getEmailPessoal().indexOf("@") == -1 && s.getEmailPessoal().indexOf(".") == -1 || s.getEmailPessoal().equals("")) {
            throw new GeralException("Digite um e-mail válido.");
        } else {
            this.dao.alterar(s);
        }
    }

    /**
     * 
     * @param s = Servidor
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Servidor pesquisar(Servidor s) throws ConexaoException, ConsultaException {
        return (Servidor) this.dao.pesquisar(s);
    }

    public Servidor pesquisarMatricula(Servidor s) throws ConsultaException, ConexaoException {
        return (Servidor) this.dao.pesquisarMatricula(s);
    }

    /**
     * 
     * @param s = Servidor
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Servidor pesquisarLogin(Servidor s) throws ConexaoException, ConsultaException {
        return (Servidor) this.dao.pesquisarLogin(s);
    }

    /**
     * 
     * @param s = Servidor
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void criarSenha(Servidor s) throws ConexaoException, ConsultaException {
        this.dao.criarSenha(s);
    }

    public ArrayList<Servidor> pesquisarLotacao(Lotacao lot) throws ConexaoException, ConsultaException {
        return (ArrayList<Servidor>) this.dao.listarServLotaca(lot);
    }
}
